package 蓝桥杯;
/**
 * 把 2019 分解成 3 个各不相同的正整数之和，并且要求每个正整数都不包 含数字 2 和 4，一共有多少种不同的分解方法？ 
 * 注意交换 3 个整数的顺序被视为同一种方法，例如 1000+1001+18 和 1001+1000+18 被视为同一种。
 * 注意看清楚题目：正整数，所以不能取零
 */
import java.util.HashSet;
/**
 * 先把所有1-2019的所有不同正整数找出来，其实第一位只能取1
 * 然后存入到set集合中，再将set转为数组去遍历，找出里面所有满足条件的结果进行统计
 * 每三个数他会有六种结果
 * @author 凌毅
 *2022-3-3120:15:29
 * @description:
 */


public class 数的分解 {

	/**
	 *2022-3-31 19:37:03
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[] = {0,1,3,5,6,7,8,9};
		HashSet<Integer> set=new HashSet<>();
		for (int h = 0; h <=1; h++) {
		for (int i = 0; i <arr.length ; i++) {
			for (int j = 0; j <arr.length; j++) {
				for (int k = 0; k < arr.length; k++) {
					int temp=h*1000+arr[i]*100+arr[j]*10+arr[k];
					set.add(Integer.valueOf(temp));
//					System.out.println(temp);
				}
				
			}
		}
		}
		System.out.println(set.size());
		set.remove(0);
		System.out.println(set);
		Object []s=set.toArray();
		int arrs[]=new int[1023];
		for (int i = 0; i < s.length; i++) {
			arrs[i]=(int) s[i];
		}
		int sum=0;
		//当需要多种循环取得不同的数时，使用这种判断，就不会遗漏。arrs[i]!=arrs[j]&&arrs[j]!=arrs[k]并不能判断三个数都不一样
		//还要加上&&arrs[i]!=arrs[k]
		for (int i = 0; i < arrs.length; i++) {
			for (int j = 0; j < arrs.length; j++) {
				
					for (int k = 0; k < arrs.length; k++) {
						if (arrs[i]!=arrs[j]&&arrs[i]!=arrs[k]&&arrs[j]!=arrs[k]&&arrs[i]+arrs[j]+arrs[k]==2019) {
							sum++;
						}
					}
				
			}
//			System.out.println(sum);
		}
		System.out.println(sum);
		System.out.println(sum/6);
	}

}
